package com.jl15988.chainlog.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 监控配置属性
 */
@Setter
@Getter
@Component
@ConfigurationProperties(prefix = "chain-log.monitor")
public class ChainLogProperties {

    /**
     * 是否启用监控
     */
    private boolean enabled = true;

    /**
     * 监听方式：GLOBAL(全局监控), ANNOTATION(注解监控)
     */
    private MonitorMode mode = MonitorMode.GLOBAL;

    /**
     * 需要排除的包路径
     */
    private List<String> excludePackages = new ArrayList<>();

    /**
     * 需要排除的类名
     */
    private List<String> excludeClasses = new ArrayList<>();

    /**
     * 需要排除的方法名
     */
    private List<String> excludeMethods = new ArrayList<>();

    /**
     * 最大参数长度（超过则截断）
     */
    private int maxParamLength = 1000;
    
    /**
     * 可视化配置
     */
    private Visualization visualization = new Visualization();

    /**
     * 监控模式枚举
     */
    public enum MonitorMode {
        GLOBAL, ANNOTATION
    }
    
    /**
     * 可视化配置类
     */
    @Setter
    @Getter
    public static class Visualization {
        /**
         * 是否启用可视化功能
         */
        private boolean enabled = true;
        
        /**
         * 是否包含监控本身
         */
        private boolean includeItself = false;
        
        /**
         * 数据保留时间（毫秒），默认24小时
         */
        private long dataRetentionTime = 24 * 60 * 60 * 1000L;
        
        /**
         * 最大API日志数量
         */
        private int maxApiLogs = 1000;
        
        /**
         * 每个API最大方法日志数量
         */
        private int maxMethodLogsPerApi = 500;
    }

}